<?php
namespace app\common;

use \Firebase\JWT\JWT;

class Token
{
    protected static $key = "example_key";
    public static function encode($data)
    {
        $time = time(); //当前时间
        $payload = array(
            'iss' => 'Yvonne', //签发者 可选
            'aud' => 'Admin', //接收该JWT的一方，可选
            'iat' => $time, //签发时间
            'nbf' => $time , //(Not Before)：某个时间点后才能访问，比如设置time+30，表示当前时间30秒后才能使用
            'exp' => $time+3600*24*7, //过期时间,这里设置一周
            'data' =>$data,
        );
        return JWT::encode($payload, Token::$key);
    }
    /**
        * 验证token是否有效,默认验证exp,nbf,iat时间
        * @param string $jwt 需要验证的token
        * @return string $msg 返回消息
       */
    public static function decode($jwt)
    {
        JWT::$leeway = 60;//当前时间减去60，把时间留点余地
        $decoded = JWT::decode($jwt, Token::$key, ['HS256']); //HS256方式，这里要和签发的时候对应
        $arr = (array)$decoded;
        $time = time(); //当前时间
        if ($arr['exp']<$time) {
            return ['valid'=>false,'data'=>[]];
        }
        return ['valid'=>true,'data'=>$arr['data']];  //返回信息
    }
}
